package org.example.judge_contest.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.example.judge_common.entity.PageResult;
import org.example.judge_common.rank.AllUserRank;
import org.example.judge_common.rank.RankList;
import org.example.judge_pojo.ContestRecord;

import java.util.List;

public interface ContestRecordService extends IService<ContestRecord> {

    List<ContestRecord> list(String userId,String contestId,String problemId);

    //用户题目第一次ac记录
    ContestRecord getFirstAc(String userId,String contestId,String problemId);

    //最后一次提交记录
    ContestRecord lastSubmit(String userId,String contestId,String problemId);

    ContestRecord getBySubmitId(String id);

    //获取用户题目提交次数
    int count(String userId, String contestId, String problemId);

    //比赛题目第一次AC记录
    ContestRecord getFirstAc(String contestId, String problemId);

//    List<ContestRecord> listByContestId(String contestId);

    /**
     * 获取比赛的榜单
     * @param contestId
     * @return
     */
    RankList rank(String contestId,boolean cache);

    /**
     * 比赛某题的通过率
     * @param contestId
     * @param problemId
     * @param isAc
     * @return
     */
    int countContestSubmit(String contestId, String problemId, Integer isAc);

    /**
     * 用户是否通过该题目
     * @param contestId
     * @param problemId
     * @param userId
     * @param isAc
     * @return
     */
    boolean isAc(String contestId, String problemId, String userId,Integer isAc);


    /**
     * 获取所有题目通过数量
     * 所有比赛用户通过题目数量排行榜
     * @param page
     * @param size
     * @param beginTime 指定开始时间
     * @return
     */
    PageResult<AllUserRank> getUserRank(Integer page, Integer size,String beginTime);

    /**
     * 获取该题目通过用户数量
     * @param contestId
     * @param problemId
     * @return
     */
    Integer getAcceptProblemRank(String contestId,String problemId);

    // 参加的比赛数量
    Integer ContestCount(String userId);

    /**
     * 获取用户本场比赛通过题目数量
     * @param userId
     * @param contestId
     * @return
     */
    Integer acceptProblemCount(String userId, String contestId);
}
